﻿using System.Collections.Generic;
using System.Linq;
using Szabalyrendszer.Modositok;

namespace Szabalyrendszer
{
    public class Fegyverzet //: IHarcertek
    {
        public Fegyverzet()
        {
            Sebzes = new PotencialisSebzes();
            HarcertekBonuszok = new List<HarcertekBonusz>();
        }

        public string Nev { get; set; }
        public string Tipus { get; set; }
        public string FegyverCsalad { get; set; }
        public int Meretkategoria { get; set; }
        public bool VanAtutes { get; set; }
        public bool VanLefegyverzes { get; set; }
        public bool VanFegyvertores { get; set; }

        public List<SebzesBonusz> SebzesBonuszok
        {
            get { return Sebzes.Bonuszok; }
            set { Sebzes.Bonuszok = value; }
        }
        public List<HarcertekBonusz> HarcertekBonuszok { get; set; }

        private int ke;
        private int te;
        private int ve;
        private int ce;
        private int sfe;
        private int mgt;
        private int idoigeny;
        private int atutes;

        public int Ke
        {
            get { return ke + HarcertekBonuszok.OfType<IHarcertek>().Sum(m => m.Ke); }
            set { ke = value; }
        }

        public int Te
        {
            get { return te + HarcertekBonuszok.OfType<IHarcertek>().Sum(m => m.Te); }
            set { te = value; }
        }

        public int Ve
        {
            get { return ve + HarcertekBonuszok.OfType<IHarcertek>().Sum(m => m.Ve); }
            set { ve = value; }
        }

        public int Ce
        {
            get { return ce + HarcertekBonuszok.OfType<IHarcertek>().Sum(m => m.Ce); }
            set { ce = value; }
        }

        public int Sfe
        {
            get { return sfe + HarcertekBonuszok.OfType<IHarcertek>().Sum(m => m.Sfe); }
            set { sfe = value; }
        }

        public int Mgt
        {
            get { return mgt + HarcertekBonuszok.OfType<IHarcertek>().Sum(m => m.Mgt); }
            set { mgt = value; }
        }

        public int Idoigeny
        {
            get { return idoigeny + HarcertekBonuszok.OfType<IHarcertek>().Sum(m => m.Idoigeny); }
            set { idoigeny = value; }
        }

        public int TulutesKuszob
        {
            get { return HarcertekBonuszok.Sum(h => h.TulutesKuszob); }
            set { }
        }

        public PotencialisSebzes Sebzes { get; set; }

        int Atutes
        {
            get { return VanAtutes ? atutes : 0; }
            set { atutes = value; }
        }

        public HarcertekBonusz OsszesHarcertekBonusz()
        {
            return new HarcertekBonusz
            {
                Ke = this.Ke,
                Te = this.Te,
                Ve = this.Ve,
                Ce = this.Ce,
                Mgt = this.Mgt,
                Sfe = this.Sfe,
                TulutesKuszob = this.TulutesKuszob,
                Sebzes = this.Sebzes
            };
        }
    }
}
